package com.saydc.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.saydc.model.Empleado;
import com.saydc.utils.HibernateUtils;

public class EmpleadosDAO {
	
	private static EmpleadosDAO instance;

	public static EmpleadosDAO getInstance(){
		if(instance == null){
			instance = new EmpleadosDAO();
		}
		return instance;
	}
	
	public void altaEmpleado(Empleado empleado){
		Session session;
		Transaction tx = null;
		try{
			session = HibernateUtils.currentSession();
			tx = session.beginTransaction();
			session.save(empleado);
			tx.commit();
		}catch(Exception e){
			tx.rollback();
			e.printStackTrace();
			//TODO throw new InsertException("Error al insertar en la base de datos", e.printStackTrace());
			System.out.println("Error al insertar en la base");
		}finally{
			HibernateUtils.closeSession();
		}
	}
	
	public Empleado getEmpleado(int idEmpleado){
		Empleado empleado;
		Session session = HibernateUtils.currentSession();
		empleado = (Empleado)session.load(Empleado.class, idEmpleado);
		//empleado = (Empleado)session.createCriteria(Empleado.class).add(Restrictions.eq("idEmpleado", idEmpleado)).uniqueResult();
		return empleado;
	}
	
	public Empleado buscarEmpleadoPorLegajo(String legajo){
		Empleado empleado;
		Session session = HibernateUtils.currentSession();
		//TODO tratar por si no unico o por si null
		empleado = (Empleado) session.createCriteria(Empleado.class).add(Restrictions.eq("legajo", legajo)).uniqueResult();
		return empleado;
	}
	
	public void actualizaEmpleado(Empleado empleado){
		Session session;
		Transaction tx = null;
		try{
			session = HibernateUtils.currentSession();
			tx = session.beginTransaction();
			session.update(empleado);
			tx.commit();
		}catch(Exception e){
			tx.rollback();
			e.printStackTrace();
			//TODO throw new InsertException("Error al insertar en la base de datos", e.printStackTrace());
			System.out.println("Error al insertar en la base");
		}finally{
			HibernateUtils.closeSession();
		}
	}

	@SuppressWarnings("unchecked")
	public List<Empleado> getAllEmpleados() {
		ArrayList<Empleado> listaEmpleados = null;
		Session session = HibernateUtils.currentSession();
		listaEmpleados = (ArrayList<Empleado>)session.createQuery("select e from Empleado e").list();
		return listaEmpleados;
	}

	public Empleado buscarEmpleadoPorNombre(String nombre) {
		Empleado empleado;
		Session session = HibernateUtils.currentSession();
		//TODO tratar por si no unico o por si null
		empleado = (Empleado) session.createCriteria(Empleado.class).add(Restrictions.eq("nombre", nombre)).uniqueResult();
		return empleado;
	}

}
